Karmaşıklık bir algoritmanın çok sayıda parametre karşısında
maliyet davranışındaki değişikliği/artmayı gösteren kavramsal bir ifadedir.
Genel olarak, az sayıda parametreler için karmaşıklıkla ilgilenilmez;
eleman sayısı n'nin sonsuza gitmesi durumunda algoritmanın maliyet hesabının
davranışını görmek veya diğer benzer işleri yapan algoritmalarla karşılaştırmak
için kullanılır.
Programların karmaşıklığını matemetiksel olarak değişebilir.
Karmaşıklığı ifade edebilmek için asimtotik ifadeler
kullanılmaktadır; bu amaçla O(g(n)), (g(n)),
(g(n)),
o(g(n)) gibi tanımlara başvurulur. Genel olarak büyük O ve q
notasyonları daha çok kullanılmaktadır. Örneğin, bir sıralama algoritmasının
karmaşıklığı O(n2) ise, bunun anlamı, n çok büyük
değerlere giderken algoritmanın zaman maliyeti karesel olarak artar şeklindedir.
Örneğin karmaşıklığı O(nlog2n) olan bir sıralama algoritması
O(n2) olana göre daha iyidir; n çok büyük değerlere
giderken karmaşıklık doğrusal çarpanlı logaritmik olarak artar. Aslında,
bulunabilse, en iyi çözümü veren karmaşıklık O(1) şeklinde sabit
olanıdır; ancak asosiyatif bellek1 veya çok iyi bir çırpı fonksiyonu
bulunmadıkça bu durum çoğu zaman sağlanmaz.
Büyük
O
Değişim
Şekli
O(1)
Sabit
O(logn)
Logaritmik
O(n)
Doğrusal
O(nlogn)
Doğrusal çarpanlı logaritmik
O(n2)
Karasel
O(n3)
Kübik
O(2n)
İki tabanında üssel
O(10n)
On tabanında üssel
O(n!)
Faktöriyel
1 Asosiyatif bellek, içeriğiyle adreslenebilen bir bellek türü olup,
özellikle arama tabanlı uygulamalarda donanımsal bir destek sağlar ve
arama hızlı biçimde gerçekleştirilir.